# -*- codeing = utf-8 -*-
# @Time : 2021/3/3 20:18
# @Atuthor: 朱朱
# @File: 165re.match类的使用.py
# @Software: PyCharm
import re
"""
# 调用 re.match、re.search或者对re.finditer结果进行遍历
# 拿到的内容都是re.Match类型对象

# . 任意字符
# * 出现任意次数  贪婪模式

# 在Python的正则表达式里，默认是贪婪模式，尽可能多的匹配
# 在贪婪模式后面添加  ?  可以将贪婪模式转换成为非贪婪模式
"""
m = re.search(r'm.*a', 'o3rjomjadas')
print(m)
print(dir(m))
print(m.pos)
print(m.endpos)
print(m.span())
# 使用group方法可以获取匹配的字符串结果
# group 可以传参，表示第 n 个分组
print(type(m.group()))
print(m.group(0))

# group方法表示正则表达式的分组
# 1. 在正则表达式里使用 () 表示一个分组
# 2. 如果没有分组，默认只有一组
# 3. 分组的下标从 0 开始
m1 = re.search(r'(9.*)(0.*)(5.*7)','da9fi0riel5kfsda7ifsdaiferit')
print(m1.group(0)) #整个表达式,当做一个整体
print(m1.group(1)) # 表达式里第一个分组 ,9fi
print(m1.group(2))  # 0riel
print(m1.group(3))  # 5kfsda7

print(m1.groups()) # 结果按元组显示
print(m1.groupdict()) # 获取到分组组成的字典

# (?P<name>表达式)  可以给分组起一个名字
m2 = re.search(r'(9.*)(?P<lina>0.*)(5.*7)', 'da9fi0riel5kfsda7ifsdaiferit')
print(m2.groupdict()) #{'lina':'0riel'}

# 可以通过分组名或者分组的下标获取到分组里匹配到的字符串
print(m2.group('lina')) # 0riel
print(m2.group(2)) # 就是取第二个分组数据,0是取整个表达式数据
print(m2.span(2)) # 取得坐标

